diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-12 10:42:36 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-12 10:42:36 +0000 |
| commit | 8642ee064ddf96f1db2b948b4cc8bbbd6cfee820 (patch) | |
| tree | 36bd57d147ba929f1d72918d1fb91ad2c4778624 /app/[lng]/evcp/(evcp) | |
| parent | 57ea2f740abf1c7933671561cfe0e421fb5ef3fc (diff) | |
(최겸) 구매 일반계약, 입찰 수정
Diffstat (limited to 'app/[lng]/evcp/(evcp)')
3 files changed, 73 insertions, 4 deletions
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx index f460f570..b6c181dc 100644 --- a/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx +++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-failure/page.tsx @@ -4,7 +4,7 @@ import { GetBiddingsSchema, searchParamsCache } from '@/lib/bidding/validation' import { BiddingsFailureTable } from '@/lib/bidding/failure/biddings-failure-table'
export const metadata: Metadata = {
- title: '유찰입찰',
+ title: '폐찰 및 재입찰',
description: '유찰된 입찰 내역을 확인하고 재입찰을 진행할 수 있습니다.',
}
@@ -26,7 +26,7 @@ export default async function BiddingFailurePage({ <div className="flex flex-col gap-4 p-4">
<div className="flex items-center justify-between">
<div>
- <h1 className="text-2xl font-bold tracking-tight">유찰입찰</h1>
+ <h1 className="text-2xl font-bold tracking-tight">폐찰 및 재입찰</h1>
<p className="text-muted-foreground">
유찰된 입찰 내역을 확인하고 재입찰을 진행할 수 있습니다.
</p>
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx index 0d725bbf..4f6e9715 100644 --- a/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx +++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-receive/page.tsx @@ -4,7 +4,7 @@ import { GetBiddingsSchema, searchParamsCache } from '@/lib/bidding/validation' import { BiddingsReceiveTable } from '@/lib/bidding/receive/biddings-receive-table'
export const metadata: Metadata = {
- title: '입찰서접수및마감',
+ title: '입찰서 접수 및 마감',
description: '입찰서 접수 및 마감 현황을 확인하고 개찰을 진행할 수 있습니다.',
}
@@ -26,7 +26,7 @@ export default async function BiddingReceivePage({ <div className="flex flex-col gap-4 p-4">
<div className="flex items-center justify-between">
<div>
- <h1 className="text-2xl font-bold tracking-tight">입찰서접수및마감</h1>
+ <h1 className="text-2xl font-bold tracking-tight">입찰서 접수 및 마감</h1>
<p className="text-muted-foreground">
입찰서 접수 현황을 확인하고 개찰을 진행할 수 있습니다.
</p>
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx new file mode 100644 index 00000000..1456564f --- /dev/null +++ b/app/[lng]/evcp/(evcp)/(procurement)/bid-selection/[id]/detail/page.tsx @@ -0,0 +1,69 @@ +import { notFound } from 'next/navigation' +import { getBiddingById } from "@/lib/bidding/service" +import { Bidding } from "@/db/schema/bidding" +import { Button } from "@/components/ui/button" +import { ArrowLeft } from "lucide-react" +import Link from "next/link" +import { BiddingSelectionDetailContent } from "@/lib/bidding/selection/bidding-selection-detail-content" + +// 메타데이터 생성 +export async function generateMetadata({ params }: { params: Promise<{ lng: string; id: string }> }) { + const { lng, id } = await params + const parsedId = parseInt(id) + if (isNaN(parsedId)) return { title: '입찰선정 상세보기' } + + try { + const bidding = await getBiddingById(parsedId) + return { + title: bidding ? `${bidding.title} - 입찰선정 상세보기` : '입찰선정 상세보기', + } + } catch { + return { title: '입찰선정 상세보기' } + } +} + +interface PageProps { + params: Promise<{ lng: string; id: string }> +} + +export default async function BiddingSelectionDetailPage({ params }: PageProps) { + const { lng, id } = await params + const parsedId = parseInt(id) + + if (isNaN(parsedId)) { + notFound() + } + + const bidding: Bidding | null = await getBiddingById(parsedId) + + if (!bidding) { + notFound() + } + + return ( + <div className="container py-6 space-y-6"> + {/* 헤더 */} + <div className="flex justify-between items-center"> + <div className="flex items-center gap-4"> + <div> + <h1 className="text-3xl font-bold tracking-tight"> + 입찰선정 상세보기 + </h1> + <p className="text-muted-foreground mt-2"> + 입찰 No. {bidding.biddingNumber ?? ""} - {bidding.title} + </p> + </div> + </div> + <Link href={`/${lng}/evcp/bid-selection`} passHref> + <Button variant="outline" className="flex items-center"> + <ArrowLeft className="mr-2 h-4 w-4" /> + 입찰선정 목록으로 돌아가기 + </Button> + </Link> + </div> + + {/* 입찰선정 상세 콘텐츠 */} + <BiddingSelectionDetailContent biddingId={parsedId} bidding={bidding} /> + </div> + ) +} |
